"""
线程并发爬取笔趣阁小说网站
"""
import os
from concurrent.futures import ThreadPoolExecutor

from bqg_reptile import BQGClient

if __name__ == '__main__':
    client = BQGClient()

    # [(1, (章节网址, 章节标题))] 变成 [(1,章节网址,章节标题)]
    urls = [(i,page[0],page[1]) for i,page in enumerate(client.get_pages('/book/73583/'))]

    with ThreadPoolExecutor(max_workers=8) as executor:
        #用with关键字创建进程池 在使用完后自动将进程池关闭  用变量executor保存创建的进程池
        #map()方法会获取任务列表中每个元素，调用任务函数，传入参数，也就是说任务列表中有几个任务就会调用几次
        #x = (1,章节网址,章节标题) 在函数x中调用txt_download_page函数再把x拆包参数传到txt_download_page函数中
        #先将urls任务列表传入到匿名函数x中再在匿名函数中调用txt_download_page函数并且把参数传入
        executor.map(lambda x:client.txt_download_page(*x), urls)    #第一个 参数是任务函数，第二个参数是任务列表

    files = [file.split('_') for file in os.listdir('temp1')]  # os.listdir('temp1')得到临时文件夹下的所有文件
    files.sort(key=lambda x: int(x[0]))
    with open(os.path.join(client.download_path, '道诡异仙.txt'), 'w', encoding='utf-8') as wf:
        for file in files:
            with open(os.path.join('temp1', '_'.join(file)), 'r', encoding='utf-8') as rf:
                wf.write(rf.read() + '\n')
                wf.flush()      #写完后清空
    print('完成')